In a virtual data center environment, multiple host computers each running a number of virtual machines may communicate together with a storage array over a switch fabric. The virtual machines, in some cases, run one or more user and/or server applications, each running workloads to meet users' demands. Each application running on these virtual machines typically demands a different quality of service, which corresponds to certain requirements with respect to packet loss, bit rate, throughput, latency, scalability, availability, and/or jitter etc. For example, a database server application and a file system virus scanning application running on the same virtual machine have different service policies that have different quality of service requirements. I/O latency, for instance, is a much more critical performance factor for the database server application than the file system virus scanning application. However, in some cases, various types of application I/O traffic with different QoS requirements may share and compete for the same resources leading to significantly suboptimal performance by applications with high QoS requirements.